function [FunApp,PolApp]=SteadyState_FunPolApp(PP,SS)

%% Preliminary

%% Exogenous State
[ES,TrMat]  =   MarkovChain_IndependentMixture({PP.ExoState.IdioInc.IndNode,PP.ExoState.IdioInc.TrMat},...
                                               {PP.ExoState.Idio_FI.IndNode,PP.ExoState.Idio_FI.TrMat},...
                                               {PP.ExoState.Idio_RI.IndNode,PP.ExoState.Idio_RI.TrMat});
TempInd     =   sum(TrMat,2)>0;
ES          =   ES(TempInd,:);
TrMat       =   TrMat(TempInd,TempInd);
FunApp.ExoState ...
            =   struct('N',size(ES,1),'State',ES,...
                       'TrMat',TrMat,'IndNode',(1:1:size(ES,1))');
%% Grid Limits
%--------------------------------------------------------------------------
% Preset Limit
%--------------------------------------------------------------------------
PreLimit    =   struct('f',PP.b_lb+[-0.5,10*3*4*1]);
%--------------------------------------------------------------------------
% Imposed by Entrant
%--------------------------------------------------------------------------
EntLimit    =   struct('f',[0,0]);

%--------------------------------------------------------------------------
% V(b,a,z): Value of Surviving Households
%--------------------------------------------------------------------------
% b
V_Limit_f   =   PreLimit.f;

V_Limit     =   struct('f',V_Limit_f);
% Construct the Grid for b with Breaking at b=0
% Note: Since the liquid asset interest rate has a kink at b=0, so we will
% build in this kink in the value function approximation by adding a
% duplicated break point at b=0.
if PP.KAPPA>0
    NN          =   PP.FunAppStruct.V.f.N;
    Curv        =   PP.FunAppStruct.V.f.BreakCurvature;
    TempBreaks  =   VecFun_MakeLogDiffGrid(V_Limit.f(1),V_Limit.f(2),NN-2,Curv)';
    Breaks_f    =   [TempBreaks(TempBreaks<0);0;0;TempBreaks(TempBreaks>0)];
    PresetBreaks=   struct('f',Breaks_f);
    FunApp.V    =   FunAppClass({'f'},PP.FunAppStruct.V,V_Limit,PresetBreaks);
else
    FunApp.V    =   FunAppClass({'f'},PP.FunAppStruct.V,V_Limit);
end
FunApp.V.AugmentState(FunApp.ExoState.IndNode);


%--------------------------------------------------------------------------
% U(f,Lag_z,Lag_o) or V_bar(f,z,o) or V_hat(f,z,o) or V(f,z,o)
%--------------------------------------------------------------------------
FunApp.U    =   FunApp.V;

%% Policy Function Approximation
PolApp      =   struct();
PolLimit    =   V_Limit;
% Construct the Grid for b with Breaking at b=0
% Note: Since the liquid asset interest rate has a kink at b=0, so we will
% build in this kink in the value function approximation by adding a
% duplicated break point at b=0.
if PP.KAPPA>0
    NN          =   PP.PolAppStruct.V.f.N;
    Curv        =   PP.PolAppStruct.V.f.BreakCurvature;
    TempBreaks  =   VecFun_MakeLogDiffGrid(PolLimit.f(1),PolLimit.f(2),NN-2,Curv)';
    Breaks_f    =   [TempBreaks(TempBreaks<0);0;0;TempBreaks(TempBreaks>0)];
    PresetBreaks=   struct('f',Breaks_f);
    PolApp.V    =   FunAppClass({'f'},PP.PolAppStruct.V,PolLimit,PresetBreaks);
else
    PolApp.V    =   FunAppClass({'f'},PP.PolAppStruct.V,PolLimit);
end
PolApp.V.AugmentState(FunApp.ExoState.IndNode);